package q2d.client.worlds;

import java.util.ArrayList;
import java.util.LinkedList;

import q2d.common.models.Map;
import q2d.common.models.units.Bullet;
import q2d.common.models.units.Flag;
import q2d.common.models.units.Message;
import q2d.common.models.units.Player;
import q2d.common.models.units.Smoke;
import q2d.common.models.units.Unit;
import q2d.common.models.units.WallHit;
import q2d.common.models.units.PlayerHit;

/**
 * Wirtualny swiat gry.
 */
public class GameWorld {

	// listy jednostek Unit w grze:
	public ArrayList<Player> playersList;
	public ArrayList<Bullet> thisBulletsList;// pociski wystrzelone przez gracza tej instancji gry
	public ArrayList<Bullet> othersBulletsList;// pociski wystrzelone przez pozostalych graczy
	public ArrayList<Smoke> fxSmokesList;
	public ArrayList<WallHit> fxWallHitsList;
	public ArrayList<PlayerHit> fxPlayerHitList;
	public ArrayList<Message> fxMessageList;
	
	public Player thisPlayer;// obiekt Player gracza tej instancji gry
	public Map gameMap;// mapa gry

	public Flag redFlag;
	public Flag blueFlag;
	public int redTeamScore;
	public int blueTeamScore;

	public String debugString;// TODO wywalic to

	/**
	 * Konstruktor.
	 * @param game_map referencja obiektu typu Map z opisem mapy.
	 */
	public GameWorld(Map game_map){
		gameMap = game_map;

		playersList = new ArrayList<Player>();
		thisBulletsList = new ArrayList<Bullet>();
		othersBulletsList = new ArrayList<Bullet>();
		fxSmokesList = new ArrayList<Smoke>();
		fxWallHitsList = new ArrayList<WallHit>();
		fxPlayerHitList = new ArrayList<PlayerHit>();
		fxMessageList = new ArrayList<Message>();

		redFlag = new Flag();
		redFlag.team = Player.RED_TEAM;
		redFlag.x = Map.RED_FLAG_HOME_X;
		redFlag.y = Map.RED_FLAG_HOME_Y;
		blueFlag = new Flag();
		blueFlag.team = Player.RED_TEAM;
		blueFlag.x = Map.BLUE_FLAG_HOME_X;
		blueFlag.y = Map.BLUE_FLAG_HOME_Y;

		blueTeamScore = redTeamScore = 0;

		debugString = "";// TODO wywalic to
	}


	/**
	 * Dodaje gracza tej instancji gry.
	 * @param player
	 * @param is_application_owner ustawic true jezeli obiekt 'player' ma reprezentowac gracza tej instancji gry
	 */
	public void addThisPlayer(Player player){
		thisPlayer = player;
	}


	/**
	 * Dodaje pocisk gracza tej instancji gry.
	 * @param bullet
	 */
	public void addThisBullet(Bullet bullet){
		thisBulletsList.add(bullet);
	}


	/**
	 * Dodaje pocisk obcego gracza.
	 * @param bullet
	 */
	public void addOthersBullet(Bullet bullet){
		othersBulletsList.add(bullet);
	}
}
